booleanな値を返すvim.fnのwrapper function
Neovim Luaのはまりやすい点として、vim.fn.has()などの戻り値がbooleanに変換されないことが挙げられます。Luaにおいてはnilとfalse以外は全てtruthyなので、そのままif文の条件に使うと常にtrueになってしまいます。
そこでこのようなラップ関数はどうでしょうか。
code:lua
vim.bool_fn = setmetatable({}, {
__index = function(_, key)
return function(...)
if not v or v == 0 or v == "" then
return false
elseif type(v) == "table" and next(v) == nil then
return false
end
return true
end
end,
})
if vim.fn.has('mac') == 1 then ... endをif vim.bool_fn.has('mac') then ... endのように置き換えられます。